<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue Router 解析 Get 方法传递的参数</title>
</head>
<body>
<div id="app">
    <h1>欢迎使用 Vue Router 插件</h1>

    <router-Link to="/">首页</router-Link>

    <router-Link to="/user/1">用户1</router-Link>
    <router-Link to="/user/2">用户2</router-Link>
    <router-Link to="/params/1?name=abcque&gender=m&age=18">通过get 传参</router-Link>

    <router-Link to="/about">关于</router-Link>

    <router-view></router-view>
</div>

<template id="user">
    <!--    <h1>User Page</h1>-->
    <!--  使用 $route.params.占位符可以访问到动态的参数  -->
    <h1>User {{ $route.params.id }} Page</h1>
</template>

<template id="params">
    <h1>User {{ $route.params.id }} Page</h1>
    <h1>参数内容： {{ $route.query }}</h1>
</template>

<script type="module">
    import {createApp} from "../../../../js/vue.esm-browser.js";
    import {defineComponent} from "../../../../js/vue.esm-browser.js";
    import {createRouter, createWebHashHistory} from "../../../../js/vue-router.esm-browser.js";


    // step 1. 定义相关的组件，可以是直接使用 HTML 代码模板，也可以使用 defineComponents 进行定义
    const Home = {
        template: "<h1>Home Page</h1>"
    }

    const About = {
        template: "<h1>About Page</h1>"
    }

    let User = defineComponent(
        {
            template: "#user"
        }
    );

    let Params = defineComponent(
        {
            template: "#params"
        }
    );

    // step 2. 定义 URL 和 组件的对应关系。
    // / 代表的是从根路径开始
    const routes = [
        {
            path: "/",
            component: Home,
        },
        {
            path: "/about",
            component: About,
        },
        /*{
            path: "/user/1",
            component: User,
        },
        {
            path: "/user/2",
            component: User,
        },*/
        {
            // 动态字段从 : 开始。当 url 能够匹配的情况，就能访问到内容。
            // 这里的 id 这是一个占位符，不具有特殊的含义。 url 路径匹配之后，可以使用该占位符访问
            path: "/user/:id",
            component: User,
        },

        {
            // 动态字段从 : 开始。当 url 能够匹配的情况，就能访问到内容。
            // 这里的 id 这是一个占位符，不具有特殊的含义。 url 路径匹配之后，可以使用该占位符访问
            path: "/params/:id",
            component: Params,
        },

        /*{
            // 匹配非法路径
            path: "/:pathMissMatch",
            component: {
                template: "<h1>非法路由，无内容匹配</h1>"
            }

        },*/

        {
            // 匹配所有的非法路径
            path: "/:pathMissMatch(.*)*",
            component: {
                // template: "<h1>非法路由，无内容匹配</h1>"
                template: "<h1>非法路由，无内容匹配</h1><h2>{{ $route.params.pathMissMatch }}</h2>"
            }

        },


    ]

    let app = createApp(
        {
            setup() {
                return {}
            }
        }
    )

    // step 3.创建一个路由对象。注意：一定要有路由模式。
    const router = createRouter(
        {
            history: createWebHashHistory(),
            routes: routes,
        }
    )

    // step 4. 加载路由
    app.use(router)

    app.mount("#app")
</script>
</body>
</html>